package com.ruoyi.manage.service;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import com.ruoyi.manage.domain.CrMatchingRecord;

/**
 * 智能匹配记录Service接口
 * 
 * @author ruoyi
 * @date 2024-09-24
 */
public interface ICrMatchingRecordService 
{
    /**
     * 查询智能匹配记录
     * 
     * @param matchingId 智能匹配记录主键
     * @return 智能匹配记录
     */
    public CrMatchingRecord selectCrMatchingRecordByMatchingId(Long matchingId);

    /**
     * 查询智能匹配记录列表
     * 
     * @param crMatchingRecord 智能匹配记录
     * @return 智能匹配记录集合
     */
    public List<CrMatchingRecord> selectCrMatchingRecordList(CrMatchingRecord crMatchingRecord);

    /**
     * 新增智能匹配记录
     * 
     * @param crMatchingRecord 智能匹配记录
     * @return 结果
     */
    public int insertCrMatchingRecord(CrMatchingRecord crMatchingRecord);

    /**
     * 修改智能匹配记录
     * 
     * @param crMatchingRecord 智能匹配记录
     * @return 结果
     */
    public int updateCrMatchingRecord(CrMatchingRecord crMatchingRecord);

    /**
     * 批量删除智能匹配记录
     * 
     * @param matchingIds 需要删除的智能匹配记录主键集合
     * @return 结果
     */
    public int deleteCrMatchingRecordByMatchingIds(Long[] matchingIds);

    /**
     * 删除智能匹配记录信息
     * 
     * @param matchingId 智能匹配记录主键
     * @return 结果
     */
    public int deleteCrMatchingRecordByMatchingId(Long matchingId);

    /**
     * 为学生生成匹配推荐
     * 
     * @param studentId 学生ID
     * @param limit 推荐数量限制
     * @return 匹配结果列表
     */
    public List<CrMatchingRecord> generateMatchingRecommendations(Long studentId, int limit);

    /**
     * 为招聘生成匹配推荐
     * 
     * @param recruitmentId 招聘ID
     * @param limit 推荐数量限制
     * @return 匹配结果列表
     */
    public List<CrMatchingRecord> generateRecruitmentRecommendations(Long recruitmentId, int limit);

    /**
     * 计算学生与招聘的匹配度
     * 
     * @param studentId 学生ID
     * @param recruitmentId 招聘ID
     * @return 匹配度分数
     */
    public BigDecimal calculateMatchingScore(Long studentId, Long recruitmentId);

    /**
     * 计算技能匹配度
     * 
     * @param studentId 学生ID
     * @param recruitmentId 招聘ID
     * @return 技能匹配度分数
     */
    public BigDecimal calculateSkillMatchingScore(Long studentId, Long recruitmentId);

    /**
     * 计算兴趣匹配度
     * 
     * @param studentId 学生ID
     * @param clubId 社团ID
     * @return 兴趣匹配度分数
     */
    public BigDecimal calculateInterestMatchingScore(Long studentId, Long clubId);

    /**
     * 计算时间匹配度
     * 
     * @param studentId 学生ID
     * @param recruitmentId 招聘ID
     * @return 时间匹配度分数
     */
    public BigDecimal calculateTimeMatchingScore(Long studentId, Long recruitmentId);

    /**
     * 批量创建匹配记录
     * 
     * @param matchingRecords 匹配记录列表
     * @return 结果
     */
    public int batchCreateMatchingRecords(List<CrMatchingRecord> matchingRecords);

    /**
     * 更新匹配记录状态
     * 
     * @param matchingId 匹配记录ID
     * @param status 新状态
     * @return 结果
     */
    public int updateMatchingStatus(Long matchingId, String status);

    /**
     * 根据学生ID查询匹配记录
     * 
     * @param studentId 学生ID
     * @param status 状态（可选）
     * @return 匹配记录列表
     */
    public List<CrMatchingRecord> selectMatchingsByStudentId(Long studentId, String status);

    /**
     * 根据社团ID查询匹配记录
     * 
     * @param clubId 社团ID
     * @param status 状态（可选）
     * @return 匹配记录列表
     */
    public List<CrMatchingRecord> selectMatchingsByClubId(Long clubId, String status);

    /**
     * 根据招聘ID查询匹配记录
     * 
     * @param recruitmentId 招聘ID
     * @param status 状态（可选）
     * @return 匹配记录列表
     */
    public List<CrMatchingRecord> selectMatchingsByRecruitmentId(Long recruitmentId, String status);

    /**
     * 获取高匹配度的记录
     * 
     * @param threshold 匹配度阈值
     * @param limit 数量限制
     * @return 匹配记录列表
     */
    public List<CrMatchingRecord> getHighMatchingRecords(BigDecimal threshold, int limit);

    /**
     * 获取学生的匹配统计
     * 
     * @param studentId 学生ID
     * @return 统计信息
     */
    public Map<String, Object> getStudentMatchingStatistics(Long studentId);

    /**
     * 获取社团的匹配统计
     * 
     * @param clubId 社团ID
     * @return 统计信息
     */
    public Map<String, Object> getClubMatchingStatistics(Long clubId);

    /**
     * 获取招聘的匹配统计
     * 
     * @param recruitmentId 招聘ID
     * @return 统计信息
     */
    public Map<String, Object> getRecruitmentMatchingStatistics(Long recruitmentId);

    /**
     * 获取匹配度分布统计
     * 
     * @return 分布统计
     */
    public Map<String, Object> getMatchingScoreDistribution();

    /**
     * 重新计算匹配记录
     * 
     * @param matchingId 匹配记录ID
     * @return 结果
     */
    public int recalculateMatching(Long matchingId);

    /**
     * 批量重新计算匹配记录
     * 
     * @param studentId 学生ID（可选）
     * @param recruitmentId 招聘ID（可选）
     * @return 重新计算的数量
     */
    public int batchRecalculateMatchings(Long studentId, Long recruitmentId);

    /**
     * 学生查看匹配推荐
     * 
     * @param matchingId 匹配记录ID
     * @param studentId 学生ID
     * @return 结果
     */
    public int viewMatchingRecommendation(Long matchingId, Long studentId);

    /**
     * 学生对匹配结果进行反馈
     * 
     * @param matchingId 匹配记录ID
     * @param studentId 学生ID
     * @param feedback 反馈内容
     * @param isAccurate 是否准确
     * @return 结果
     */
    public int submitMatchingFeedback(Long matchingId, Long studentId, String feedback, Boolean isAccurate);

    /**
     * 社团查看匹配推荐
     * 
     * @param matchingId 匹配记录ID
     * @param clubId 社团ID
     * @return 结果
     */
    public int viewClubRecommendation(Long matchingId, Long clubId);

    /**
     * 获取推荐算法效果分析
     * 
     * @return 分析结果
     */
    public Map<String, Object> getRecommendationAnalysis();

    /**
     * 清理过期的匹配记录
     * 
     * @param days 保留天数
     * @return 清理数量
     */
    public int cleanupExpiredMatchings(int days);

    /**
     * 导出匹配记录数据
     * 
     * @param crMatchingRecord 查询条件
     * @return 匹配记录列表
     */
    public List<CrMatchingRecord> exportMatchingRecords(CrMatchingRecord crMatchingRecord);
}